package ui

import org.uqbar.wicket.xtend.WicketExtensionFactoryMethods
import dominio.Jugador
import dominio.JardinTablero
import org.apache.wicket.markup.html.WebPage
import org.apache.wicket.model.PropertyModel
import org.apache.wicket.markup.html.basic.Label
import org.apache.wicket.markup.html.form.Form
import org.apache.wicket.model.CompoundPropertyModel
import org.uqbar.wicket.xtend.XListView
import org.uqbar.wicket.xtend.XButton
import org.apache.wicket.markup.html.list.ListItem
import applicationModel.Fila

class JardinTableroPage extends WebPage{
	extension WicketExtensionFactoryMethods = new WicketExtensionFactoryMethods
	var Jugador jugador;
	var JardinTablero jardinTablero;
	
	new(Jugador jugadorX){
		jugador=jugadorX;
		jardinTablero = new JardinTablero(jugador);
		jardinTablero.start();
		
		this.mostrarDatosJugador()  //Mostrar dinero y nombre de Jugador
		
		val Form<JardinTablero> tableroForm = new Form<JardinTablero>("tableroForm", new CompoundPropertyModel<JardinTablero>(jardinTablero));
		
		this.mostrarFilas(tableroForm) //Para mostrar las filas en la tabla y los botones plantar y atacar
		this.botones(tableroForm)
		this.addChild(tableroForm)
	}
	
	def botones(Form<JardinTablero> tableroForm) {
		tableroForm.addChild(new XButton("JardinZen").onClick = [| this.launchJardinZen(jugador); ]);
		tableroForm.addChild(new XButton("AlmanaqueZombie").onClick = [|this.launchAlmanaqueZombie()]);
	}
	
	def launchJardinZen(Jugador jugador) {
		responsePage = new JardinZenTerrestrePage(jugador, this)
	}
	
	def launchAlmanaqueZombie() {
		responsePage = new AlmanaqueZombiePage(this) 
	}
	
	def mostrarFilas(Form<JardinTablero> tableroForm) {
		val listView = new XListView<Fila>("filas")
		listView.populateItem = [ item |
			item.model = item.modelObject.asCompoundModel
			item.addChild(new Label("tipo"))
			item.addChild(new Label("plantas"))
			
			item.addChild(new XButton("plantar").onClick = [| plantar(item.modelObject); ]);
			item.addChild(new XButton("atacar").onClick = [|atacar(item.modelObject)]);
								]
								
		tableroForm.addChild(listView)
				
	}
	
	def plantar(Fila fila) {
		responsePage = new PlantarPage(this, fila, jugador) 
	}
	
	def atacar(Fila fila) {
		responsePage = new AtacarPage(this, fila, jugador) 
		}
	
	def mostrarDatosJugador() {
		val jugadorNombre = new Label("nombreJug", new PropertyModel(jugador, "nombre"));
        this.addChild(jugadorNombre)
        jugadorNombre.outputMarkupId = true
        
        val jugadorDinero = new Label("dineroJug", new PropertyModel(jugador, "dinero"));
        this.addChild(jugadorDinero)
        jugadorNombre.outputMarkupId = true        
        }
	
	}